/**
 * @author rxliuli
 */
const baseCustomerValidate = (() => {
    return RxFormValidator.validator({
        rxElemValidators: [
            RxElemValidator.notBlank('unitName', '[客户名称] 不能为空'),
            RxElemValidator.notBlank('unitNature', '[单位属性] 不能为空'),
            RxElemValidator.notBlank('idType', '[证件类型] 不能为空'),
            RxElemValidator.notBlank('idNumber', '[证件号码] 不能为空'),
            RxElemValidator.notBlank('officer', '[网络信息安全责任人信息] 不能为空'),
            RxElemValidator.notBlank('address', '[单位地址] 不能为空'),
            RxElemValidator.notBlank('zipCode', '[邮政编码] 不能为空'),
            // RxElemValidator.notBlank('registerTime', '[注册时间] 不能为空'),
            // RxElemValidator.notBlank('updateTime', '[更新时间] 不能为空'),
            // RxElemValidator.notBlank('serviceRegTime', '[服务开通时间] 不能为空'),
            RxElemValidator.notBlank('userType', '[用户类型] 不能为空'),

            RxElemValidator.limitLen('unitName', '[客户名称] 长度最大为 50 位', 50),
            RxElemValidator.limitLen('idNumber', '[证件号码] 长度最大为 50 位', 50),
            RxElemValidator.limitLen('address', '[单位地址] 长度最大为 128 位', 128),
            RxElemValidator.limitLen('zipCode', '[邮政编码] 长度最大为 6 位', 6),
            RxElemValidator.limitLen('comments', '[备注] 长度最大为 200 位', 200),
        ],
    })
})()
const baseServiceInfoValidate = (() => {
    RxElemValidator.notBlankBySetMode = (name, msg) => RxElemValidator.create(name, msg, (v, form) => form.setMode === 0 && rx.stringValidator.isBlank(rx.toString(v)))
    RxElemValidator.limitLenBySetMode = (name, msg, max, min) => RxElemValidator.create(name, msg, (v, form) => form.setMode === 0 && RxElemValidator.limitLen(name, msg, max, min).checkFn(rx.toString(v)))
    return RxFormValidator.validator({
        rxElemValidators: [
            RxElemValidator.notBlank('serviceContent', '[服务内容] 不能为空'),
            RxElemValidator.notBlank('setMode', '[接入方式] 不能为空'),
            RxElemValidator.notBlank('businessType', '[业务类型] 不能为空'),
            RxElemValidator.notBlank('regType', '[备案类型] 不能为空'),
            RxElemValidator.notBlank('regId', '[备案号或许可证号] 不能为空'),
            RxElemValidator.limitLen('serviceContent', '[服务内容] 长度最大为 300 位', 300),
            RxElemValidator.limitLen('regId', '[备案号或许可证号] 长度最大为 64 位', 64),
        ],
    })
})()
const baseHouseInfoValidate = RxFormValidator.validator({
    rxElemValidators: [
        RxElemValidator.notBlank('frameInfoId', '[机架信息] 不能为空'),
        RxElemValidator.notBlank('distributeTime', '[资源分配时间] 不能为空'),
        // RxElemValidator.notBlank('bandWidth', '[网络带宽] 不能为空'),

        RxElemValidator.limitLen('virtualHostName', '[虚拟主机信息] 最大长度为 128 位', 128),
        RxElemValidator.limitLen('virtualHostAddress', '[虚拟主机网络地址] 最大长度为 100 位', 100),
        RxElemValidator.limitLen('virtualHostManagement', '[虚拟主机管理地址] 最大长度为 100 位', 100),

        RxElemValidator.create('virtualHostAddress', '[虚拟主机网络地址] 格式错误。示例: 127.0.0.1', v => v && !rx.stringValidator.isIpv4(v)),
        RxElemValidator.create('virtualHostManagement', '[虚拟主机管理地址] 格式错误。示例: 127.0.0.1', v => v && !rx.stringValidator.isIpv4(v)),
    ],
})

const baseServiceDomainValidate = (() => {
    return RxFormValidator.validator({
        rxElemValidators: [
            RxElemValidator.notBlank('domain', '[域名] 不能为空'),
            RxElemValidator.create('domain', '[域名] 格式错误，正确示例 [google.com]', rx.deny(rx.stringValidator.isDomain)),
        ],
    })
})()
const baseIpTransInfoValidate = (() => {
    const notIpv4 = rx.CombinedPredicate.not(rx.stringValidator.isIpv4)
    let checkIpArr = (start, end) => (_v, form) => {
        const fn = name => form[name].split('.').slice(0, 3)
        return !rx.compare(fn(start), fn(end))
    }
    let checkIpLast = (start, end) => (_v, form) => {
        const last = name => form[name].split('.')[3]
        return last(start) > last(end)
    }
    return RxFormValidator.validator({
        rxElemValidators: [
            RxElemValidator.notBlank('internetStartIp', '[互联网起始 IP 地址] 不能为空'),
            RxElemValidator.notBlank('internetEndIp', '[互联网终止 IP 地址] 不能为空'),
            RxElemValidator.notBlank('privateStartIp', '[私网起始 IP 地址] 不能为空'),
            RxElemValidator.notBlank('privateEndIp', '[私网终止 IP 地址] 不能为空'),
            RxElemValidator.create('internetStartIp', '[互联网起始 IP 地址] 格式错误，示例: 192.168.1.1', notIpv4),
            RxElemValidator.create('internetEndIp', '[互联网终止 IP 地址] 格式错误，示例: 192.168.1.255', notIpv4),
            RxElemValidator.create('privateStartIp', '[私网起始 IP 地址] 格式错误，示例: 192.168.1.255', notIpv4),
            RxElemValidator.create('privateEndIp', '[私网终止 IP 地址] 格式错误，示例: 192.168.1.255', notIpv4),
            RxElemValidator.create('internetIp', '[互联网起始 IP 地址] 和 [互联网终止 IP 地址] 必须在同一网段下（前三位相同），示例: [192.168.1.1, 192.168.1.255]', checkIpArr('internetStartIp', 'internetEndIp')),
            RxElemValidator.create('privateIp', '[私网起始 IP 地址] 和 [私网终止 IP 地址] 必须在同一网段下（前三位相同），示例: [192.168.1.1, 192.168.1.255]', checkIpArr('privateStartIp', 'privateEndIp')),
            RxElemValidator.create('internetIp', '[互联网终止 IP 地址] 最后一位的地址必须大于 [互联网起始 IP 地址]，示例: [192.168.1.1, 192.168.1.255]', checkIpLast('internetStartIp', 'internetEndIp')),
            RxElemValidator.create('privateIp', '[私网终止 IP 地址] 最后一位的地址必须大于 [私网起始 IP 地址]，示例: [192.168.1.1, 192.168.1.255]', checkIpLast('privateStartIp', 'privateEndIp')),
        ],
    })
})()